/*

* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Smart-Shop开源商城系统/ Java商城-首选电商平台系统 请务必保留此注释头信息
* |     开源地址: https://gitee.com/ningbo-qishan/gruul-mall
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     可正常分享和学习源码,未经授权 不可商用！
* |     商业版中台购买/开源版商业授权 联系技术客服
* |     官网:  https://www.73app.cn/
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* |     Copyright (c) 2016-2999 宁波启山智软科技有限公司
* |     版权所有 ,侵权必究！
* ------------------------------------------------------------------------

*/
package com.medusa.gruul.discount.task;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.medusa.gruul.common.core.util.LocalDateTimeUtils;
import com.medusa.gruul.discount.api.model.vo.manager.CouponVo;
import com.medusa.gruul.discount.service.manager.ICouponService;
import com.medusa.gruul.discount.web.enums.CouponEffectiveTypeEnum;
import com.medusa.gruul.discount.web.enums.CouponStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * @description: UpdateCouponTask.java
 * @author: lcysike
 * @date: 2019/12/22 21:41
 */
@Slf4j
@Component
public class UpdateCouponTask {

    @Resource
    private ICouponService couponService;

    @Scheduled(fixedRate = 1000 * 60 * 6)
    public void updateSkuTask() {
        log.info("-----------优惠劵定时任务开启-----------");
        List<CouponVo> couponVos = couponService.findCouponListForTask();
        if(CollectionUtil.isNotEmpty(couponVos)){
            couponVos.stream().forEach(couponVo -> {
                Long nowTime = System.currentTimeMillis();
                //判断有效时间类型
                if(CouponEffectiveTypeEnum.TIME_BEGIN.getStatus() == couponVo.getEffectiveType()){
                    //判断时间是否在有效期内  在的话优惠劵状态为活动中 开始时间取当天的0点时间 结束时间取结束时间当天的23：59：59秒
                    Long startTime = DateUtil.beginOfDay(couponVo.getStartTime()).getTime();
                    Long endTime = DateUtil.endOfDay(couponVo.getEndTime()).getTime();
                    if(nowTime < startTime){
                        couponVo.setStatus(CouponStatusEnum.BE_GOING.getStatus());
                    }else if(nowTime > startTime && nowTime < endTime){
                        couponVo.setStatus(CouponStatusEnum.ON_GOING.getStatus());
                    }else if (nowTime > endTime){
                        couponVo.setStatus(CouponStatusEnum.OVER.getStatus());
                    }
                }else{
                    couponVo.setStatus(CouponStatusEnum.OVER.getStatus());
                }
                //后台优惠劵更新
                try{
                    couponService.updateCouponForTask(couponVo);
                }catch(Exception e){
                    e.printStackTrace();
                    log.error("优惠劵id为"+couponVo.getId()+e.getMessage(), e);
                }
            });
        }
        log.info("-----------优惠劵定时任务结束-----------");
    }
}
